import { login, getProfile, getUserDetailById } from '@/api/user'
// 引入token方法 命名冲突改名
import { setToken as saveToken, getToken, removeToken } from '@/utils/auth'
// import { resetRouter } from '@/router'
import { resetRouter } from '@/router/index'

export default {
  namespaced: true,
  state: {
    token: getToken() || null,
    userInfo: {}
  },
  mutations: {
    setToken: function(state, newToken) {
      // 将token保存到vuex
      state.token = newToken
      // 将token保存到本地
      saveToken(newToken)
    },
    // 删除token
    delToken: function(state) {
      state.token = null
      removeToken()
    },
    // 删除userinfo
    delUserInfo: function(state) {
      state.userInfo = {}
    },
    setUserInfo(state, newUserInfo) {
      state.userInfo = newUserInfo
    }
  },
  actions: {
    // 获取用户token
    async userLogin(context, userInfo) {
      try {
        const res = await login(userInfo)
        // 调用vuex命名空间中的mutations方法（存储token到vuex中）
        context.commit('setToken', res.data)
      } catch (err) {
        // 抛出错误
        throw new Error(err)
      }
    },
    // 获取用户信息
    async getUserProfile(context) {
      try {
        // 获取用户基本信息
        const res = await getProfile()
        // 获取用户头像
        const info = await getUserDetailById(res.data.userId)
        // 将两个对象合并为一个
        context.commit('setUserInfo', { ...res.data, ...info.data })
        // console.log(res)
      } catch (err) {
        // 抛出错误
        throw new Error(err)
      }
    },
    // 用户退出
    userLogout(context) {
      // 删除token
      context.commit('delToken')
      // 删除userinfo
      context.commit('delUserInfo')
      // 重置路由
      resetRouter()
    }
  }
}
